/**
 ******************************************************************************
 * @file           : bsp_tim_base.h
 * @brief          : Basic Timer Driver Header File
 ******************************************************************************
 * @attention
 *
 * 基本定时器驱动程序头文件
 * 支持TIM6和TIM7的定时中断功能
 * 提供周期性定时中断、DAC触发等功能
 *
 * 适配平台：STM32F1xx
 *
 ******************************************************************************
 */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __BSP_TIM_BASE_H
#define __BSP_TIM_BASE_H

#ifdef __cplusplus
extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include <stdint.h>
#include "stm32f1xx.h"

/* ============================================================================ */
/*                          配置宏定义（用户可修改）                             */
/* ============================================================================ */

/* 基本定时器选择（可以同时使能多个）*/
#define BASE_TIM_USE_TIM6                               /*!< 使用TIM6 */
//#define BASE_TIM_USE_TIM7                             /*!< 使用TIM7 */

/* TIM6配置 */
#ifdef BASE_TIM_USE_TIM6
    #define TIM6_PERIOD_MS          1                   /*!< TIM6定时周期（ms） */
    #define TIM6_PRIORITY           3                   /*!< TIM6中断优先级 */
#endif

/* TIM7配置 */
#ifdef BASE_TIM_USE_TIM7
    #define TIM7_PERIOD_MS          10                  /*!< TIM7定时周期（ms） */
    #define TIM7_PRIORITY           3                   /*!< TIM7中断优先级 */
#endif

/* ============================================================================ */
/*                          类型定义                                            */
/* ============================================================================ */

/* Exported types ------------------------------------------------------------*/
/**
 * @brief 基本定时器错误码枚举
 */
typedef enum
{
    BASE_TIM_OK = 0,            /*!< 成功 */
    BASE_TIM_ERROR_PARAM,       /*!< 参数错误 */
    BASE_TIM_ERROR_HAL,         /*!< HAL库错误 */
    BASE_TIM_ERROR_NOT_INIT     /*!< 未初始化 */
} BASE_TIM_Error_e;

/**
 * @brief 基本定时器ID枚举
 */
typedef enum
{
    BASE_TIM_ID_TIM6 = 0,       /*!< TIM6 */
    BASE_TIM_ID_TIM7,           /*!< TIM7 */
    BASE_TIM_ID_MAX
} BASE_TIM_ID_e;

/* Exported constants --------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
/* Exported variables --------------------------------------------------------*/

/* Exported functions --------------------------------------------------------*/

/* 初始化函数 */
void tim_base_init(BASE_TIM_ID_e tim_id, uint16_t period_ms); /* 初始化基本定时器 */
void tim_base_deinit(BASE_TIM_ID_e tim_id);                    /* 反初始化 */

/* 控制函数 */
void tim_base_start(BASE_TIM_ID_e tim_id);                     /* 启动定时器 */
void tim_base_stop(BASE_TIM_ID_e tim_id);                      /* 停止定时器 */
void tim_base_set_period(BASE_TIM_ID_e tim_id, uint16_t period_ms); /* 设置周期 */

/* 中断回调注册 */
void tim_base_register_callback(BASE_TIM_ID_e tim_id, void (*callback)(void)); /* 注册中断回调 */

/* 中断处理函数（由HAL回调调用） */
void tim_base_irq_handler(BASE_TIM_ID_e tim_id);               /* 定时器中断处理 */

#ifdef __cplusplus
}
#endif

#endif /* __BSP_TIM_BASE_H */
